This invention relates to the field of computer graphics, specifically, the architecture of real time graphics rendering systems.
An image generation system is a computer graphics rendering system, typically rendering images from geometric data in real-time. In many applications, an image generation system is tasked with transforming data into a form that can be rendered by a graphics processor to provide a visually realistic representation of an environment. Many applications are interactive so that the image generation system must respond in real-time to keep the environment synchronized with the current viewpoint of the user to provide the necessary realism. An image generator must render a scene at a rate equal to the display""s refresh rate, typically 60 Hz. It is important that the image generator constantly meet this refresh rate target, or the scene will appear to stutter or jitter. Flight simulation is the quintessential example of interactive 3D computer graphics applications. Additionally, flight simulation is no longer limited to the visual spectrum. For military flight simulators, it is important to also simulate sensors, such as FLIR (Forward Looking Infra Red), NVG (Night Vision Goggles), and Radar. In a geospecific simulator, multispectral or hyperspectral (i.e. some or many wavelengths) imagery may be used in conjunction with an accurate model of the sensor""s spectral response characteristics to create a physics-based simulation of how a particular sensor will behave during a simulated mission. Other examples of interactive 3D computer graphics applications include high-end video games, virtual reality games, modeling systems, scientific visualization systems, and training systems for performing spacecraft maneuvers or operating transportation craft such as tankers and trucks. These applications also include a geometrical description of the simulated environment, including models and textures for the actual terrain, cultural features such as buildings, trees and roads, and special effects such as explosions and smoke columns, forming what is usually called the scene database or, more commonly, simply the xe2x80x98databasexe2x80x99 for a given simulated area. Terrain is the largest element of a large geospecific database. The texture and elevation data can range in size from a few gigabytes to over a terabyte for a single database.
The image generation systems for these applications include or has an interface to a simulation host computer system that runs a numerical model that simulates the appropriate dynamics, for example aircraft dynamics. The data received from the host computer is processed by the image generation system for use by one or more channels in the image generator. A channel is a rendering computer system having a graphics system coupled to a display. Examples of displays include a projector and a screen, a monitor, a heads up display in a cockpit, or a multifunction display used to represent non-visual spectrum data, such as the forward looking infrared sensor. A simulated cockpit may have six projectors all providing an immersive display, and each of those projectors is run by a channel.
Although traditionally, the image generator systems have been integrated in a single computer system, the advent of high performance low cost personal computer systems makes the creation of image generation systems out of a collection of commodity personal computers possible.
In these clustered systems, multiple computers perform different tasks that, when combined together, amount to the entire functionality of a full image generation system. The creation of this integrated clustered system formed of multiple computers presents one problem of integration and communication of the nodes in the system so that they appear to be a single, unified system for external systems such as the host computer in the flight simulator example.
Typically approaches using a data protocol between the external system and the image generation systems are used across nodes, meaning that each node in the cluster perceives itself as an entire image generator with a single display output, but these approaches result in costly replication of the scene database across nodes and difficult management of the image generator as a whole.
A similar problem arises with the use of multi-processor systems. Sharing the work and data across multiple central processing units (CPUs) is frequently a requirement for high performance, but splitting the work in multiple threads proves to be difficult to implement and make scalable, especially while guaranteeing consistent real-time performance.
Systems such as Silicon Graphics Inc. (SGI""s) IRIS Performer provide a simple and elegant infrastructure to share work across CPUs in a single system, but they do not readily extend into clustered distributed systems. Other clustering architectures for use in the context of scientific computing require lower level changes to the software at nodes across the system. In addition, the focus is on the actual distribution of the computational workload rather than the data used in the computations. Computational cluster architectures also rely upon low-latency network interconnects such as Myrinet which are much more costly than off-the-shelf network interconnects such as gigabit Ethernet.
In one aspect, the present invention provides a data pipeline for processing multiple stages or versions of a progressive data structure in an image generation system. In one embodiment, this progressive data structure includes a header section with a table of pointers to a collection of data substructures. The structure of a progressive data structure follows the same pattern in every stage. In each stage of the pipeline, the progressive data structure has pointers to substructures comprising data for the attributes of one or more components associated with a scene, and those pointers contain the address in the progressive data section for that particular substructure if present, or NULL if not present. These data substructures may include nested data substructures. The data structure is progressive because its contents are developed as it progresses through the pipelined building process. As data incoming to the pipeline progresses through the different stages, the nature of the data in the versions of progressive data structures transforms from abstract information to a concrete or expanded form suitable for graphics rendering operations. An early stage progressive data structure may be only a few hundred bytes in size, and have abstract data, for example weather status or target types in the flight simulator example, but by the time the data is rendered or used for actual final computations, the size can be hundreds of megabytes, and include coordinates, texture maps and rendering parameters.
Builder functions or modules perform processing based on a progressive data structure. A builder may organize or format incoming data into the progressive data structure format. A builder may traverse this structure and expand the data in the substructures by performing rendering computations. A builder may also traverse the structure and remove substructures not to be processed for a particular function such as objects outside the view frustrum of a channel. An example of expansion is computing the colors of the sky, clouds, and terrain, from a single time of day parameter. An example of contraction is deleting all parameters relating to a component such as a ground target (e.g., a truck) if that ground target is disabled or beyond the horizon and pointing to NULL any pointer in a parent of a substructure that contains any of these parameters. Builder functions may be implemented in software stored in a computer usable medium such as a memory, a compact disc, or computer disk, or be carried in a data transmission medium such as a signal. The progressive data structure may also be stored in a computer usable medium or be carried in a data transmission medium.
This pipeline infrastructure enables a multi-stage data flow that can extend transparently from a standalone system to a single node system with multiple processors, to a clustered system with multiple nodes or a clustered system having one or more nodes with multiple processors.
The present invention may also be embodied in a clustered system having a plurality of multiple processor nodes for performing the processing of the multi-stage progressive data pipeline for image generation. The plurality of nodes includes two main types of nodes, a front-end node and a back-end node. In one aspect, a system having a clustered architecture typically interfaces as an integrated unit with other systems or user interfaces. In one embodiment, the front-end node has a data communications interface for the image generation system. Furthermore, the front-end node transforms incoming data into a progressive structure format and removes unnecessary structures that are not to be rendered for a frame based on the current viewpoint or mode settings. Examples of mode settings include a setting indicating whether or not terrain rendering is enabled or a setting indicating whether or not special effects are enabled.
The front-end node is networked with the back-end nodes for the transmission of progressive data structures. In one embodiment of the clustered system, a multicasting network protocol is used for sending the data to the nodes, which avoids having the front end node issue an independent stream of packets to each node, reducing aggregate bandwidth requirements and increasing system performance. The front node and the back-end nodes are also networked via a system network. The nodes in the clustered system architecture communicate data, particularly administrative data, examples of which are control, status, statistics data, between themselves, particularly between the front-end node and each back-end node, using the system network.
Back-end nodes receive the progressive data structure generated by the front-end node, and perform different processing based upon the functions performed by the node. Examples of back-end nodes include rendering nodes that perform computations the results of which are in a suitable form for display by a display system.
Another type of back-end node is a data retrieval node that updates the data in the locally stored scene description database of the rendering nodes. For example, in the flight simulator example, the image generation system includes database retrieval nodes which retrieve the texture data representing the terrain the pilot would see at a certain altitude and location, in accordance to the current position of the airplane and viewpoint. For this example, the database retrieval nodes then transmit the texture data over a third network to rendering nodes, which apply the texture data to the terrain, and then use the viewpoint received from the front end to project the scene onto the display. By having nodes with scene database storage retrieve the data needed by other nodes performing rendering and other graphics related computations or functions, these other nodes are not involved in managing multiple copies of the database, which must be fastidiously maintained to be of the same revision, and avoid having to retrieve data from disk and manage the potential performance impact of the disk operations. Additionally, it is advantageous to keep one copy of the scene database because the added cost of storage devices, the increased likelihood of failure due to the failure of a storage device, and the increased time required to load a new scene database into the image generator are all abated.